#ifndef _W5500_CONF_H_
#define _W5500_CONF_H_

typedef unsigned char SOCKET;

#include "FreeRTOS.h"
#include "task.h"
#include "w5500_driver.h"
#include "utility.h"
#include "w5500.h"
#include "socket.h"
#include "../Internet/dhcp.h"

#define MAX_BUF_SIZE		 				   1460       			              //定义每个数据包的大小
#define KEEP_ALIVE_TIME	     		   30	                            // 30sec
#define TX_RX_MAX_BUF_SIZE         2048

#define W5500_Default_IP           {192,168,0,88}                  //W5500默认IP地址
#define W5500_Defalut_Subnet       {255,255,255,0}                 //W5500默认子网掩码
#define W5500_Defalut_Gateway      {192,168,0,1}                   //W5500默认网关
#define W5500_Defalut_Dns_Server   {114,114,114,114}               //W5500默认DNS
#define W5500_Defalut_MAC          {0x00,0x08,0xdc,0x11,0x11,0x11} //W5500默认MAC
#define W5500_SW_Version           "V0.1.0"                        //W5500软件版本号
#define W5500_Default_Local_Port   5000                            //本地端口号

#define W5500_Default_Remote_IP    {192,168,0,11}                  //远端IP地址
#define W5500_Default_Remote_Port   5000                           //远端端口号


typedef enum
{
    IP_FROM_DEFINE = 0,  //使用初始定义的IP信息
    IP_FROM_DHCP   = 1,  //使用DHCP获取IP信息
    IP_FROM_EEPROM = 2,  //使用EEPROM定义的IP信息
}WHT_W5500_IP_FROM_enum;

/*此结构体定义了W5500可供配置的主要参数*/
typedef struct											
{
  uint8_t mac[6];      //MAC地址
  uint8_t lip[4];      //local IP本地IP地址
  uint8_t sub[4];      //子网掩码
  uint8_t gw[4];       //网关	
  uint8_t dns[4];      //DNS服务器地址
  uint8_t rip[4];      //remote IP远程IP地址
	uint8_t sw_ver[10];  //软件版本号
  uint16_t local_port; //本地端口号
  uint16_t remote_port;//远端端口号
}WHT_W5500_Config_Info_t;

extern WHT_W5500_Config_Info_t WHT_W5500_Config_Info;/*W5500配置信息*/


/*W5500SPI相关函数*/
extern void IINCHIP_WRITE(uint32_t addrbsb, uint8_t data);				  		    /*写入一个8位数据到W5500*/
extern uint8_t IINCHIP_READ(uint32_t addrbsb);													    /*从W5500读出一个8位数据*/
extern uint16_t wiz_write_buf(uint32_t addrbsb,uint8_t* buf,uint16_t len);	/*向W5500写入len字节数据*/
extern uint16_t wiz_read_buf(uint32_t addrbsb, uint8_t* buf,uint16_t len);	/*从W5500读出len字节数据*/

/*W5500基本配置相关函数*/
extern void set_w5500_mac(uint8_t* mac);                 /*配置W5500的MAC地址*/
extern void set_w5500_ip(WHT_W5500_IP_FROM_enum ip_from);/*配置W5500的IP地址*/

/*需要用定时的的应用函数*/
extern void dhcp_timer_init(void);					/*dhcp用到的定时器初始化*/
extern void ntp_timer_init(void);						/*npt用到的定时器初始化*/
extern uint8_t dhcp_ok;      /*DHCP获取成功*/
extern uint32_t	dhcp_time;   /*DHCP运行计数*/
extern volatile uint8_t	ntptimer;/*NPT秒计数*/

#endif
